package com.qtrue.arrayTest;

/**
 * @Package: com.qtrue.arrayTest
 * @ClassName: ArrayTest02
 * @Author: xiaoBao
 * @CreateTime: 2022-03-04 11:23
 * @Description: 二维数组的使用
 *  一、理解：
 *      对于二维数组的理解，我们可以看成是一个数组array01作为另一个数组array02元素而存在。
 *      其实，从数组的底层运行机制来看，是没有多维数组这一概念的。
 *
 *  二、二维数组的使用
 *   1、二维数组的声明和初始化
 *   2、如何调用二维数组指定位置的元素
 *   3、获取二维数组的长度
 *   4、如何遍历二维数组
 */
public class ArrayTest02 {
    public static void main(String[] args) {
        // 1. 二维数组的声明和初始化

        // 一维数组和二维数组的声明和初始化对比
        // 一维数组：静态初始化
        int[] arr1 = new int[]{1,2,3};
        // 二维数组：静态初始化
        int[][] arr2 = new int[][]{{1,2,3},{4,5},{6,7,8,9}};
        // 二维数组：动态初始化[方式1]
        int[][] arr3 = new int[3][2];   // 由3个元素构成的外层数组，外层的每个元素又由一个长度为2的一维数组构成。
        // 二维数组：动态初始化[方式2]
        int[][] arr4 = new int[3][];    // 相当于外层数组长度为三，外层的每个元素下的一维数组长度不确定。

        // 错误的写法
//        String[][] str = new String[][4];
//        String[4][3] str = new String[][];
//        String[][] str = new String[4][3]{{"1","2","3"},{"1","2","3"},{"1","2","3"},{"1","2","3"}};

        // 2. 如何调用二维数组指定位置的元素
        System.out.println(arr2[0][2]); // 调用第一行第三个元素（输出3）
        System.out.println(arr3[1][1]); // null

        arr4[1] = new int[4];   // 声明第二个下标元素的二维数组长度为4（原本没有指定每一位元素的数组长度 这一步是为了声明）
        System.out.println(arr4[1][1]); // 调用第二行第二个元素

        // 3. 获取二维数组的长度
        System.out.println(arr3.length); // 3
        System.out.println(arr2[2].length); // 4

        // 4. 如何遍历二维数组
        for(int i=0;i<arr2.length;i++){
            for (int j=0;j<arr2[i].length;j++){
                System.out.println("当前是外层数组第"+i+"个元素下的第"+j+"个数组元素，值为："+arr2[i][j]);
            }
        }

    }
}
